
public class test{
    public static void main(String[] args) {
        //创建对象
        Animal a =new Dog();

        //调用成员变量:编译看左边,运行也看左边
        //编译看左边:编译的时候,看左边的父类有没有这个变量,有则编译成功
        //运行也看左边: 运行的时候,实际获取的就是左边父类成员变量的值
        System.out.println(a.name);


        //调用成员方法:编译看左边,运行看着右边
        //编译看左边:编译的时候,会看父类有没有这个方法,有则编译成功,否则失败;
        //运行看右边:运行的时候,实际运行子类的方法
        a.show();   //打印子类的show

        //理解:
        //Animal a = new Dog();
        //a是Animal类型的,所以默认都会从Animal这个类去找

        //成员方法:如果子类对方法进行了重写,那么需方法表时会把父类方法进行覆盖的
    }
}
class Animal{
    String name = "动物";

    public void show(){
        System.out.println("Animal---show方法");
    }
}

class Dog extends Animal{
    String name = "狗";

    @Override
    public void show(){
        System.out.println("Dog---show方法");
    }
}

class Cat extends Animal{
    String name = "猫";

    @Override
    public void show(){
        System.out.println("Cat---show方法");
    }
}